from django.views import View
# 导入返回响应
from SaaSDevelTool.data_return_response import create_response
# 导入错误信息装饰器
from SaaSDevelTool.data_return_response import error_message_detection
# 查询当前参数是否是int类型
from SaaSDevelTool.data_operation import is_number
# 获取数据库连接
from SaaSDevelTool.data_mysql_data import db

"""
页面创建
"""


class SaaSDevelResourceCreate(View):
    @error_message_detection
    def post(self, request):
        # 获取页面名称
        resource_name = request.POST.get("resource_name")
        # 获取页面url
        resource_urls = request.POST.get("resource_urls")
        # 获取父级编号
        resource_rid = request.POST.get("resource_rid")
        # 获取父级层级
        resource_level = request.POST.get("resource_level")
        # 判断参数是否存在
        if not all([resource_name, resource_rid, resource_level]):
            return create_response(code=400, msg="添加页面失败，页面名称，页面父级编号，页面父级层级为必传参数。")

        # 判断页面名称长度
        if len(resource_name) > 50 and len(resource_name) < 3:
            return create_response(code=400, msg="添加页面失败，页面名称不可大于50字并且不能小于2个字。")

        # 判断父级编号
        if not is_number(resource_rid):
            return create_response(code=400, msg="添加页面失败，页面父级编号必须是数字类型。")

        # 判断父级层级
        if not is_number(resource_level):
            return create_response(code=400, msg="添加页面失败，页面父级层级必须是数字类型。")

        # 增加 父级 resource_level
        resource_level = int(resource_level) + 1

        # 判断是否大于最大深度
        if resource_level > 3:
            return create_response(code=400, msg="添加页面失败,层级超过最大深度。")

        # 判断地址
        if len(resource_urls) > 50:
            return create_response(code=400, msg="添加页面失败,页面地址最大不可超过50字符。")

        # 拼接语句
        create_base_info_resource_table_sql = """
            insert into
                db_center_rbac.base_info_resource_table(
                    resource_name,
                    resource_urls,
                    resource_rid,
                    resource_level)
                values
                    ('{}','{}',{},{})
            ;""".format(resource_name, resource_urls, resource_rid, resource_level)
        # 执行插入语句
        db.update(create_base_info_resource_table_sql)
        # 执行语句
        return create_response(code=200, msg="添加页面成功！")
